package com.kurt.repository;

import com.kurt.entity.SysVehicle;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * 车辆Repository接口
 * 提供车辆数据访问方法
 */
@Repository
public interface SysVehicleRepository extends JpaRepository<SysVehicle, Long>, JpaSpecificationExecutor<SysVehicle> {

    /**
     * 根据车牌号查找车辆
     *
     * @param licensePlate 车牌号
     * @return 车辆信息
     */
    Optional<SysVehicle> findByLicensePlate(String licensePlate);

    /**
     * 根据SIM卡号查找车辆
     *
     * @param simCardNo SIM卡号
     * @return 车辆信息
     */
    Optional<SysVehicle> findBySimCardNo(String simCardNo);

    /**
     * 根据车牌号和ID查找车辆（排除指定ID）
     *
     * @param licensePlate 车牌号
     * @param id           排除的车辆ID
     * @return 车辆信息
     */
    Optional<SysVehicle> findByLicensePlateAndIdNot(String licensePlate, Long id);

    /**
     * 根据SIM卡号和ID查找车辆（排除指定ID）
     *
     * @param simCardNo SIM卡号
     * @param id        排除的车辆ID
     * @return 车辆信息
     */
    Optional<SysVehicle> findBySimCardNoAndIdNot(String simCardNo, Long id);

    /**
     * 根据组织ID查找车辆列表
     *
     * @param organizationId 组织ID
     * @return 车辆列表
     */
    List<SysVehicle> findByOrganizationId(Long organizationId);

    /**
     * 根据状态查找车辆列表
     *
     * @param status 状态
     * @return 车辆列表
     */
    List<SysVehicle> findByStatus(Integer status);

    /**
     * 根据车辆类型查找车辆列表
     *
     * @param vehicleType 车辆类型
     * @return 车辆列表
     */
    List<SysVehicle> findByVehicleType(String vehicleType);

    /**
     * 根据设备类型查找车辆列表
     *
     * @param deviceType 设备类型
     * @return 车辆列表
     */
    List<SysVehicle> findByDeviceType(String deviceType);
}
